package com.bjbn.listener;

import com.bjbn.service.RabbitmqMonitorService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

/**
 * RabbitMQ消息监听器
 * 
 * @author bjbn
 */
@Slf4j
@Component
@RabbitListener(queues = {"${rabbitmq.queue.name}"})
public class RabbitmqListener {

    @Autowired
    private RabbitmqMonitorService monitorService;
    
    @Value("${rabbitmq.queue.name}")
    private String queueName;

    /**
     * 监听队列消息
     * 
     * @param message 消息内容
     */
    @RabbitHandler
    public void handleMessage(String message) {
        try {
            // 更新队列的最新数据时间
            monitorService.updateQueueLastDataTime(queueName);
            
            // 记录日志，使用debug级别避免日志过多
            log.debug("收到队列 {} 的消息，消息长度: {}", queueName, message != null ? message.length() : 0);
        } catch (Exception e) {
            log.error("处理队列消息时发生错误", e);
        }
    }

    /**
     * 监听队列消息 - 通用对象类型
     * 
     * @param message 消息对象
     */
    @RabbitHandler
    public void handleMessage(Object message) {
        try {
            // 更新队列的最新数据时间
            monitorService.updateQueueLastDataTime(queueName);
            
            // 记录日志，使用debug级别避免日志过多
            log.debug("收到队列 {} 的对象消息，类型: {}", queueName, message != null ? message.getClass().getName() : "null");
        } catch (Exception e) {
            log.error("处理队列对象消息时发生错误", e);
        }
    }
}